From 8fe49db6bda46327bc04bace2cf6a88402d8929e Mon Sep 17 00:00:00 2001 From: Anthony Perard Date: Tue, 9 Nov 2010 18:03:55 +0000 Subject: [PATCH] firmware, qemu: Change ACPI IO values to match QEMU BIOS As part of the QEMU/Xen merge, this patch comes to change the value of sleep states and add some information in the PCI registers to match the implementation of the BIOS of QEMU. It also does a hypercall (HVM_PARAM_ACPI_IOPORTS_LOCATION) that tell the Xen to use the new Port I/O instead of the old one. [ Also, in this patch, update QEMU_TAG to the qemu-xen revision with the corresponding qemu change. -iwj ] Signed-off-by: Anthony PERARD Signed-off-by: Ian Jackson --- Config.mk | 6 +++--- tools/firmware/hvmloader/acpi/dsdt.asl | 12 ++++++------ tools/firmware/hvmloader/hvmloader.c | 11 +++++++++++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Config.mk b/Config.mk index da7406e0a5..f47a3ac266 100644 --- a/Config.mk +++ b/Config.mk @@ -185,9 +185,9 @@ endif # CONFIG_QEMU ?= ../qemu-xen.git CONFIG_QEMU ?= $(QEMU_REMOTE) -QEMU_TAG ?= 0442ec23f9efc4f8f9259351f612194f8f42900c -# Mon Nov 8 17:09:54 2010 +0000 -# stubdom: fix handing of dependency files +QEMU_TAG ?= ce3b7ce68426ea6249bb411f26b376d459c45450 +# Tue Nov 9 18:01:13 2010 +0000 +# piix4acpi, xen: change in ACPI to match the change in the BIOS. # Optional components XENSTAT_XENTOP ?= y diff --git a/tools/firmware/hvmloader/acpi/dsdt.asl b/tools/firmware/hvmloader/acpi/dsdt.asl index 03799d3b48..ea8e324ddb 100644 --- a/tools/firmware/hvmloader/acpi/dsdt.asl +++ b/tools/firmware/hvmloader/acpi/dsdt.asl @@ -33,22 +33,22 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, "Xen", "HVM", 0) */ Name (\_S3, Package (0x04) { - 0x05, /* PM1a_CNT.SLP_TYP */ - 0x05, /* PM1b_CNT.SLP_TYP */ + 0x01, /* PM1a_CNT.SLP_TYP */ + 0x01, /* PM1b_CNT.SLP_TYP */ 0x0, /* reserved */ 0x0 /* reserved */ }) Name (\_S4, Package (0x04) { - 0x06, /* PM1a_CNT.SLP_TYP */ - 0x06, /* PM1b_CNT.SLP_TYP */ + 0x00, /* PM1a_CNT.SLP_TYP */ + 0x00, /* PM1b_CNT.SLP_TYP */ 0x00, /* reserved */ 0x00 /* reserved */ }) Name (\_S5, Package (0x04) { - 0x07, /* PM1a_CNT.SLP_TYP */ - 0x07, /* PM1b_CNT.SLP_TYP */ + 0x00, /* PM1a_CNT.SLP_TYP */ + 0x00, /* PM1b_CNT.SLP_TYP */ 0x00, /* reserved */ 0x00 /* reserved */ }) diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c index 6bc493a4a2..11c78ba1d6 100644 --- a/tools/firmware/hvmloader/hvmloader.c +++ b/tools/firmware/hvmloader/hvmloader.c @@ -31,6 +31,7 @@ #include "option_rom.h" #include #include +#include #include asm ( @@ -222,9 +223,12 @@ static void pci_setup(void) /* PIIX4 ACPI PM. Special device with special PCI config space. */ ASSERT((vendor_id == 0x8086) && (device_id == 0x7113)); pci_writew(devfn, 0x20, 0x0000); /* No smb bus IO enable */ + pci_writew(devfn, 0xd2, 0x0000); /* No smb bus IO enable */ pci_writew(devfn, 0x22, 0x0000); pci_writew(devfn, 0x3c, 0x0009); /* Hardcoded IRQ9 */ pci_writew(devfn, 0x3d, 0x0001); + pci_writel(devfn, 0x40, ACPI_PM1A_EVT_BLK_ADDRESS | 1); + pci_writeb(devfn, 0x80, 0x01); /* enable PM io space */ break; case 0x0101: if ( vendor_id == 0x8086 ) @@ -763,8 +767,15 @@ int main(void) if ( hvm_info->acpi_enabled ) { + struct xen_hvm_param p = { + .domid = DOMID_SELF, + .index = HVM_PARAM_ACPI_IOPORTS_LOCATION, + .value = 1, + }; + printf("Loading ACPI ...\n"); acpi_build_tables(); + hypercall_hvm_op(HVMOP_set_param, &p); } init_vm86_tss(); -- 2.30.2